<!DOCTYPE HTML>
<html lang="en" class="sidebar-visible no-js light">
    <head>
        <!-- Book generated using mdBook -->
        <meta charset="UTF-8">
        <title>应该知道的Linux技巧</title>
        
        


        <!-- Custom HTML head -->
        


        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="theme-color" content="#ffffff" />

        
        <link rel="icon" href="favicon.svg">
        
        
        <link rel="shortcut icon" href="favicon.png">
        
        <link rel="stylesheet" href="css/variables.css">
        <link rel="stylesheet" href="css/general.css">
        <link rel="stylesheet" href="css/chrome.css">
        
        <link rel="stylesheet" href="css/print.css" media="print">
        

        <!-- Fonts -->
        <link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
        
        <link rel="stylesheet" href="fonts/fonts.css">
        

        <!-- Highlight.js Stylesheets -->
        <link rel="stylesheet" href="highlight.css">
        <link rel="stylesheet" href="tomorrow-night.css">
        <link rel="stylesheet" href="ayu-highlight.css">

        <!-- Custom theme stylesheets -->
        

        
    </head>
    <body>
        <!-- Provide site root to javascript -->
        <script type="text/javascript">
            var path_to_root = "";
            var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
        </script>

        <!-- Work around some values being stored in localStorage wrapped in quotes -->
        <script type="text/javascript">
            try {
                var theme = localStorage.getItem('mdbook-theme');
                var sidebar = localStorage.getItem('mdbook-sidebar');

                if (theme.startsWith('"') && theme.endsWith('"')) {
                    localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
                }

                if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
                    localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
                }
            } catch (e) { }
        </script>

        <!-- Set the theme before any content is loaded, prevents flash -->
        <script type="text/javascript">
            var theme;
            try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
            if (theme === null || theme === undefined) { theme = default_theme; }
            var html = document.querySelector('html');
            html.classList.remove('no-js')
            html.classList.remove('light')
            html.classList.add(theme);
            html.classList.add('js');
        </script>

        <!-- Hide / unhide sidebar before it is displayed -->
        <script type="text/javascript">
            var html = document.querySelector('html');
            var sidebar = 'hidden';
            if (document.body.clientWidth >= 1080) {
                try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
                sidebar = sidebar || 'visible';
            }
            html.classList.remove('sidebar-visible');
            html.classList.add("sidebar-" + sidebar);
        </script>

        <nav id="sidebar" class="sidebar" aria-label="Table of contents">
            <div class="sidebar-scrollbox">
                <ol class="chapter"><li class="chapter-item expanded affix "><a href="目录.html">目录</a></li><li class="chapter-item expanded "><a href="如何阅读代码.html"><strong aria-hidden="true">1.</strong> 如何阅读代码</a></li><li class="chapter-item expanded "><a href="应该知道的Linux技巧.html" class="active"><strong aria-hidden="true">2.</strong> 应该知道的Linux技巧</a></li><li class="chapter-item expanded "><a href="bash/index.html"><strong aria-hidden="true">3.</strong> bash</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="bash/8个实用而有趣Bash命令提示行.html"><strong aria-hidden="true">3.1.</strong> 8个实用而有趣Bash命令提示行</a></li><li class="chapter-item expanded "><a href="bash/Jobs.html"><strong aria-hidden="true">3.2.</strong> Jobs</a></li><li class="chapter-item expanded "><a href="bash/ShellScript语法一.html"><strong aria-hidden="true">3.3.</strong> ShellScript语法一</a></li><li class="chapter-item expanded "><a href="bash/ShellScript语法二.html"><strong aria-hidden="true">3.4.</strong> ShellScript语法二</a></li><li class="chapter-item expanded "><a href="bash/argument_parameter_option.html"><strong aria-hidden="true">3.5.</strong> argument_parameter_option</a></li><li class="chapter-item expanded "><a href="bash/如何调试bash脚本.html"><strong aria-hidden="true">3.6.</strong> 如何调试bash脚本</a></li><li class="chapter-item expanded "><a href="bash/cheat_sheet/index.html"><strong aria-hidden="true">3.7.</strong> cheat_sheet</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="bash/cheat_sheet/sh.html"><strong aria-hidden="true">3.7.1.</strong> sh</a></li></ol></li></ol></li><li class="chapter-item expanded "><a href="cmd/index.html"><strong aria-hidden="true">4.</strong> cmd</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="cmd/awk.html"><strong aria-hidden="true">4.1.</strong> awk</a></li><li class="chapter-item expanded "><a href="cmd/nm.html"><strong aria-hidden="true">4.2.</strong> nm</a></li><li class="chapter-item expanded "><a href="cmd/strace_ltrace.html"><strong aria-hidden="true">4.3.</strong> strace_ltrace</a></li><li class="chapter-item expanded "><a href="cmd/tcpdump.html"><strong aria-hidden="true">4.4.</strong> tcpdump</a></li><li class="chapter-item expanded "><a href="cmd/cheat_sheet/index.html"><strong aria-hidden="true">4.5.</strong> cheat_sheet</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="cmd/cheat_sheet/awk.html"><strong aria-hidden="true">4.5.1.</strong> awk</a></li><li class="chapter-item expanded "><a href="cmd/cheat_sheet/tcpdump.html"><strong aria-hidden="true">4.5.2.</strong> tcpdump</a></li></ol></li></ol></li><li class="chapter-item expanded "><a href="fileSystem/index.html"><strong aria-hidden="true">5.</strong> fileSystem</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="fileSystem/文件系统.html"><strong aria-hidden="true">5.1.</strong> 文件系统</a></li><li class="chapter-item expanded "><a href="fileSystem/proc/index.html"><strong aria-hidden="true">5.2.</strong> proc</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="fileSystem/proc/[pid]_fd_socket.html"><strong aria-hidden="true">5.2.1.</strong> [pid]_fd_socket</a></li><li class="chapter-item expanded "><a href="fileSystem/proc/[pid]_status.html"><strong aria-hidden="true">5.2.2.</strong> [pid]_status</a></li><li class="chapter-item expanded "><a href="fileSystem/proc/net.html"><strong aria-hidden="true">5.2.3.</strong> net</a></li><li class="chapter-item expanded "><a href="fileSystem/proc/proc浅谈.html"><strong aria-hidden="true">5.2.4.</strong> proc浅谈</a></li></ol></li></ol></li><li class="chapter-item expanded "><a href="gcc_gdb/index.html"><strong aria-hidden="true">6.</strong> gcc_gdb</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="gcc_gdb/gdb的基本使用.html"><strong aria-hidden="true">6.1.</strong> gdb的基本使用</a></li></ol></li><li class="chapter-item expanded "><a href="git/index.html"><strong aria-hidden="true">7.</strong> git</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="git/1_git基本要点.html"><strong aria-hidden="true">7.1.</strong> 1_git基本要点</a></li><li class="chapter-item expanded "><a href="git/2_git配置.html"><strong aria-hidden="true">7.2.</strong> 2_git配置</a></li><li class="chapter-item expanded "><a href="git/4_git本地操作.html"><strong aria-hidden="true">7.3.</strong> 4_git本地操作</a></li><li class="chapter-item expanded "><a href="git/5_gitignore.html"><strong aria-hidden="true">7.4.</strong> 5_gitignore</a></li><li class="chapter-item expanded "><a href="git/6_git分支操作.html"><strong aria-hidden="true">7.5.</strong> 6_git分支操作</a></li><li class="chapter-item expanded "><a href="git/7_git远程仓库.html"><strong aria-hidden="true">7.6.</strong> 7_git远程仓库</a></li><li class="chapter-item expanded "><a href="git/8_git通信协议.html"><strong aria-hidden="true">7.7.</strong> 8_git通信协议</a></li><li class="chapter-item expanded "><a href="git/9_git服务器搭建.html"><strong aria-hidden="true">7.8.</strong> 9_git服务器搭建</a></li><li class="chapter-item expanded "><a href="git/diff输出格式.html"><strong aria-hidden="true">7.9.</strong> diff输出格式</a></li><li class="chapter-item expanded "><a href="git/git使用小技巧.html"><strong aria-hidden="true">7.10.</strong> git使用小技巧</a></li><li class="chapter-item expanded "><a href="git/git分支.html"><strong aria-hidden="true">7.11.</strong> git分支</a></li><li class="chapter-item expanded "><a href="git/git提供的工具.html"><strong aria-hidden="true">7.12.</strong> git提供的工具</a></li><li class="chapter-item expanded "><a href="git/git衍合.html"><strong aria-hidden="true">7.13.</strong> git衍合</a></li><li class="chapter-item expanded "><a href="git/extend/index.html"><strong aria-hidden="true">7.14.</strong> extend</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="git/extend/git_http请求分析.html"><strong aria-hidden="true">7.14.1.</strong> git_http请求分析</a></li></ol></li></ol></li><li class="chapter-item expanded "><a href="gpg/index.html"><strong aria-hidden="true">8.</strong> gpg</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="gpg/gpg的简单使用.html"><strong aria-hidden="true">8.1.</strong> gpg的简单使用</a></li></ol></li><li class="chapter-item expanded "><a href="language/index.html"><strong aria-hidden="true">9.</strong> language</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="language/empty.html"><strong aria-hidden="true">9.1.</strong> empty</a></li><li class="chapter-item expanded "><a href="language/c_plus_plus/index.html"><strong aria-hidden="true">9.2.</strong> c_plus_plus</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="language/c_plus_plus/4个类型转换关键字.html"><strong aria-hidden="true">9.2.1.</strong> 4个类型转换关键字</a></li><li class="chapter-item expanded "><a href="language/c_plus_plus/RTTI.html"><strong aria-hidden="true">9.2.2.</strong> RTTI</a></li><li class="chapter-item expanded "><a href="language/c_plus_plus/const.html"><strong aria-hidden="true">9.2.3.</strong> const</a></li><li class="chapter-item expanded "><a href="language/c_plus_plus/内存对齐.html"><strong aria-hidden="true">9.2.4.</strong> 内存对齐</a></li><li class="chapter-item expanded "><a href="language/c_plus_plus/拷贝赋值.html"><strong aria-hidden="true">9.2.5.</strong> 拷贝赋值</a></li><li class="chapter-item expanded "><a href="language/c_plus_plus/指针.html"><strong aria-hidden="true">9.2.6.</strong> 指针</a></li><li class="chapter-item expanded "><a href="language/c_plus_plus/构造析构.html"><strong aria-hidden="true">9.2.7.</strong> 构造析构</a></li><li class="chapter-item expanded "><a href="language/c_plus_plus/私有不可访问吗.html"><strong aria-hidden="true">9.2.8.</strong> 私有不可访问吗</a></li><li class="chapter-item expanded "><a href="language/c_plus_plus/继承.html"><strong aria-hidden="true">9.2.9.</strong> 继承</a></li><li class="chapter-item expanded "><a href="language/c_plus_plus/虚函数.html"><strong aria-hidden="true">9.2.10.</strong> 虚函数</a></li><li class="chapter-item expanded "><a href="language/c_plus_plus/静态库的链接.html"><strong aria-hidden="true">9.2.11.</strong> 静态库的链接</a></li></ol></li><li class="chapter-item expanded "><a href="language/python/index.html"><strong aria-hidden="true">9.3.</strong> python</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="language/python/optparse的简单使用.html"><strong aria-hidden="true">9.3.1.</strong> optparse的简单使用</a></li></ol></li></ol></li><li class="chapter-item expanded "><a href="linux编程/index.html"><strong aria-hidden="true">10.</strong> linux编程</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="linux编程/常用开发工具.html"><strong aria-hidden="true">10.1.</strong> 常用开发工具</a></li><li class="chapter-item expanded "><a href="linux编程/线程.html"><strong aria-hidden="true">10.2.</strong> 线程</a></li><li class="chapter-item expanded "><a href="linux编程/进程.html"><strong aria-hidden="true">10.3.</strong> 进程</a></li><li class="chapter-item expanded "><a href="linux编程/fs/index.html"><strong aria-hidden="true">10.4.</strong> fs</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="linux编程/fs/dir.html"><strong aria-hidden="true">10.4.1.</strong> dir</a></li><li class="chapter-item expanded "><a href="linux编程/fs/file.html"><strong aria-hidden="true">10.4.2.</strong> file</a></li><li class="chapter-item expanded "><a href="linux编程/fs/getcwd_chdir.html"><strong aria-hidden="true">10.4.3.</strong> getcwd_chdir</a></li><li class="chapter-item expanded "><a href="linux编程/fs/stat.html"><strong aria-hidden="true">10.4.4.</strong> stat</a></li></ol></li></ol></li><li class="chapter-item expanded "><a href="make/index.html"><strong aria-hidden="true">11.</strong> make</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="make/Makefile.html"><strong aria-hidden="true">11.1.</strong> Makefile</a></li></ol></li><li class="chapter-item expanded "><a href="other/index.html"><strong aria-hidden="true">12.</strong> other</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="other/linux设置代理.html"><strong aria-hidden="true">12.1.</strong> linux设置代理</a></li><li class="chapter-item expanded "><a href="other/负数的补码怎么得到.html"><strong aria-hidden="true">12.2.</strong> 负数的补码怎么得到</a></li><li class="chapter-item expanded "><a href="other/缓存/index.html"><strong aria-hidden="true">12.3.</strong> 缓存</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="other/缓存/缓存穿透_击穿_雪崩.html"><strong aria-hidden="true">12.3.1.</strong> 缓存穿透_击穿_雪崩</a></li></ol></li></ol></li><li class="chapter-item expanded "><a href="reference/index.html"><strong aria-hidden="true">13.</strong> reference</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="reference/MEMORY_ALIGNMENT_ISSUE.html"><strong aria-hidden="true">13.1.</strong> MEMORY_ALIGNMENT_ISSUE</a></li></ol></li><li class="chapter-item expanded "><a href="small_program/index.html"><strong aria-hidden="true">14.</strong> small_program</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="small_program/程序模块.html"><strong aria-hidden="true">14.1.</strong> 程序模块</a></li></ol></li><li class="chapter-item expanded "><a href="ssh/index.html"><strong aria-hidden="true">15.</strong> ssh</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="ssh/ssh的高级使用方式.html"><strong aria-hidden="true">15.1.</strong> ssh的高级使用方式</a></li><li class="chapter-item expanded "><a href="ssh/ssh私钥登录.html"><strong aria-hidden="true">15.2.</strong> ssh私钥登录</a></li></ol></li><li class="chapter-item expanded "><a href="ubuntu/index.html"><strong aria-hidden="true">16.</strong> ubuntu</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="ubuntu/启动器文件.html"><strong aria-hidden="true">16.1.</strong> 启动器文件</a></li></ol></li><li class="chapter-item expanded "><a href="x/index.html"><strong aria-hidden="true">17.</strong> x</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="x/Linux下的X是什么.html"><strong aria-hidden="true">17.1.</strong> Linux下的X是什么</a></li><li class="chapter-item expanded "><a href="x/Win10安装VCXSRV.html"><strong aria-hidden="true">17.2.</strong> Win10安装VCXSRV</a></li><li class="chapter-item expanded "><a href="x/XApplication配置.html"><strong aria-hidden="true">17.3.</strong> XApplication配置</a></li><li class="chapter-item expanded "><a href="x/startx与xinit.html"><strong aria-hidden="true">17.4.</strong> startx与xinit</a></li></ol></li><li class="chapter-item expanded "><a href="技术名词/index.html"><strong aria-hidden="true">18.</strong> 技术名词</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="技术名词/cheat_sheet.html"><strong aria-hidden="true">18.1.</strong> cheat_sheet</a></li></ol></li><li class="chapter-item expanded "><a href="网络/index.html"><strong aria-hidden="true">19.</strong> 网络</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="网络/linux网络.html"><strong aria-hidden="true">19.1.</strong> linux网络</a></li><li class="chapter-item expanded "><a href="网络/标准的简单网络服务.html"><strong aria-hidden="true">19.2.</strong> 标准的简单网络服务</a></li><li class="chapter-item expanded "><a href="网络/计算机网络.html"><strong aria-hidden="true">19.3.</strong> 计算机网络</a></li><li class="chapter-item expanded "><a href="网络/tcp/index.html"><strong aria-hidden="true">19.4.</strong> tcp</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="网络/tcp/tcpKeepAlive与复位报文.html"><strong aria-hidden="true">19.4.1.</strong> tcpKeepAlive与复位报文</a></li><li class="chapter-item expanded "><a href="网络/tcp/tcpKeepAlive与应用层keepAlive.html"><strong aria-hidden="true">19.4.2.</strong> tcpKeepAlive与应用层keepAlive</a></li><li class="chapter-item expanded "><a href="网络/tcp/tcp简介.html"><strong aria-hidden="true">19.4.3.</strong> tcp简介</a></li></ol></li></ol></li><li class="chapter-item expanded "><a href="装机高手/index.html"><strong aria-hidden="true">20.</strong> 装机高手</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="装机高手/empty.html"><strong aria-hidden="true">20.1.</strong> empty</a></li></ol></li></ol>
            </div>
            <div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
        </nav>

        <div id="page-wrapper" class="page-wrapper">

            <div class="page">
                
                <div id="menu-bar-hover-placeholder"></div>
                <div id="menu-bar" class="menu-bar sticky bordered">
                    <div class="left-buttons">
                        <button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
                            <i class="fa fa-bars"></i>
                        </button>
                        <button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
                            <i class="fa fa-paint-brush"></i>
                        </button>
                        <ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
                            <li role="none"><button role="menuitem" class="theme" id="light">Light (default)</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
                            <li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
                        </ul>
                        
                        <button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
                            <i class="fa fa-search"></i>
                        </button>
                        
                    </div>

                    <h1 class="menu-title"></h1>

                    <div class="right-buttons">
                        
                        <a href="print.html" title="Print this book" aria-label="Print this book">
                            <i id="print-button" class="fa fa-print"></i>
                        </a>
                        
                        
                    </div>
                </div>

                
                <div id="search-wrapper" class="hidden">
                    <form id="searchbar-outer" class="searchbar-outer">
                        <input type="search" name="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
                    </form>
                    <div id="searchresults-outer" class="searchresults-outer hidden">
                        <div id="searchresults-header" class="searchresults-header"></div>
                        <ul id="searchresults">
                        </ul>
                    </div>
                </div>
                

                <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
                <script type="text/javascript">
                    document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
                    document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
                    Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
                        link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
                    });
                </script>

                <div id="content" class="content">
                    <main>
                        <h1 id="应该知道的linux技巧"><a class="header" href="#应该知道的linux技巧">应该知道的Linux技巧</a></h1>
<p>这篇文章来源于Quroa的一个问答《What are some time-saving tips that every Linux user should know?》—— Linux用户有哪些应该知道的提高效率的技巧。我觉得挺好的，总结得比较好，把其转过来，并加了一些自己的理解。 首先，我想告诉大家，在Unix/Linux下，最有效率技巧的不是操作图形界面，而是命令行操作，因为命令行意味着自动化。如果你看过《你可能不知道的Shell》以及《28个Unix/Linux的命令行神器》你就会知道Linux有多强大，这个强大完全来自于命令行，于是，就算你不知道怎么去做一个环保主义的程序员，至少他们可以让你少熬点夜，从而有利于你的身体健康和性生活。下面是一个有点长的列表，正如作者所说，你并不需要知道所有的这些东西，但是如果你还在很沉重地在使用Linux的话，这些东西都值得你看一看。 （注：如果你想知道下面涉及到的命令的更多的用法，你一定要man一点。对于一些命令，你可以需要先yum或apt-get来安装一下，如果有什么问题，别忘了Google。如果你要Baidu的话，我仅代表这个地球上所有的生物包括微生物甚至细菌病毒和小强BS你到宇宙毁灭）</p>
<h2 id="基础"><a class="header" href="#基础">基础</a></h2>
<ul>
<li>学习 Bash。你可以man bash来看看bash的东西，并不复杂也并不长。你用别的shell也行，但是bash是很强大的并且也是系统默认的。（学习zsh或tsch只会让你在很多情况下受到限制）</li>
<li>学习 vim。在Linux下，基本没有什么可与之竞争的编译辑器（就算你是一个Emacs或Eclipse的重度用户）。你可以看看《简明vim攻略》和 《Vim的冒险游戏》以及《给程序员的Vim速查卡》还有《把Vim变成一个编程的IDE》等等。</li>
<li>了解 ssh。明白不需要口令的用户认证（通过ssh-agent, ssh-add），学会用ssh翻墙，用scp而不是ftp传文件，等等。你知道吗？scp 远端的时候，你可以按tab键来查看远端的目录和文件（当然，需要无口令的用户认证），这都是bash的功劳。</li>
<li>熟悉bash的作业管理，如： &amp;, Ctrl-Z, Ctrl-C, jobs, fg, bg, kill, 等等。当然，你也要知道Ctrl+\（SIGQUIT）和Ctrl+C （SIGINT）的区别。</li>
<li>简单的文件管理 ： ls 和 ls -l (你最好知道 “ls -l” 的每一列的意思), less, head, tail 和 tail -f, ln 和 ln -s (你知道明白hard link和soft link的不同和优缺点), chown, chmod, du (如果你想看看磁盘的大小 du -sk *), df, mount。当然，原作者忘了find命令。</li>
<li>基础的网络管理： ip 或 ifconfig, dig。当然，原作者还忘了如netstat, ping, traceroute, 等</li>
<li>理解正则表达式，还有grep/egrep的各种选项。比如： -o, -A, 和 -B 这些选项是很值得了解的。</li>
<li>学习使用 apt-get 和 yum 来查找和安装软件（前者的经典分发包是Ubuntu，后者的经典分发包是Redhat），我还建议你试着从源码编译安装软件。</li>
</ul>
<h2 id="日常"><a class="header" href="#日常">日常</a></h2>
<ul>
<li>在 bash 里，使用 Ctrl-R 而不是上下光标键来查找历史命令。</li>
<li>在 bash里，使用 Ctrl-W 来删除最后一个单词，使用 Ctrl-U 来删除一行。请man bash后查找Readline Key Bindings一节来看看bash的默认热键，比如：Alt-. 把上一次命令的最后一个参数打出来，而Alt-* 则列出你可以输入的命令。</li>
<li>回到上一次的工作目录： cd –  （回到home是 cd ~）</li>
<li>使用 xargs。这是一个很强大的命令。你可以使用-L来限定有多少个命令，也可以用-P来指定并行的进程数。如果你不知道你的命令会变成什么样，你可以使用xargs echo来看看会是什么样。当然， -I{} 也很好用。示例：</li>
</ul>
<pre><code class="language-bash">find . -name \*.py | xargs grep some_function
 
cat hosts | xargs -I{} ssh root@{} hostname
</code></pre>
<ul>
<li>pstree -p 可以帮你显示进程树。（读过我的那篇《一个fork的面试题》的人应该都不陌生）</li>
<li>使用 pgrep 和 pkill 来找到或是kill 某个名字的进程。 (-f 选项很有用).</li>
<li>了解可以发给进程的信号。例如：要挂起一个进程，使用 kill -STOP [pid]. 使用 man 7 signal 来查看各种信号，使用kill -l 来查看数字和信号的对应表</li>
<li>使用 nohup 或  disown 如果你要让某个进程运行在后台。</li>
<li>使用netstat -lntp来看看有侦听在网络某端口的进程。当然，也可以使用 lsof。</li>
<li>在bash的脚本中，你可以使用 set -x 来debug输出。使用 set -e 来当有错误发生的时候abort执行。考虑使用 set -o pipefail 来限制错误。还可以使用trap来截获信号（如截获ctrl+c）。</li>
<li>在bash 脚本中，subshells (写在圆括号里的) 是一个很方便的方式来组合一些命令。一个常用的例子是临时地到另一个目录中，例如：</li>
</ul>
<pre><code class="language-bash"># do something in current dir
(cd /some/other/dir; other-command)
# continue in original dir
</code></pre>
<ul>
<li>在 bash 中，注意那里有很多的变量展开。如：检查一个变量是否存在: ${name:?error message}。如果一个bash的脚本需要一个参数，也许就是这样一个表达式 input_file=${1:?usage: $0 input_file}。一个计算表达式： i=$(( (i + 1) % 5 ))。一个序列： {1..10}。 截断一个字符串： ${var%suffix} 和 ${var#prefix}。 示例： if var=foo.pdf, then echo ${var%.pdf}.txt prints “foo.txt”.</li>
<li>通过 &lt;(some command) 可以把某命令当成一个文件。示例：比较一个本地文件和远程文件 /etc/hosts： diff /etc/hosts &lt;(ssh somehost cat /etc/hosts)</li>
<li>了解什么叫 “here documents” ，就是诸如 cat &lt;&lt;EOF 这样的东西。</li>
<li>在 bash中，使用重定向到标准输出和标准错误。如： some-command &gt;logfile 2&gt;&amp;1。另外，要确认某命令没有把某个打开了的文件句柄重定向给标准输入，最佳实践是加上 “&lt;/dev/null”，把/dev/null重定向到标准输入。</li>
<li>使用 man ascii 来查看 ASCII 表。</li>
<li>在远端的 ssh 会话里，使用 screen 或 dtach 来保存你的会话。（参看《28个Unix/Linux的命令行神器》）</li>
<li>要来debug Web，试试curl 和 curl -I 或是 wget 。我觉得debug Web的利器是firebug，curl和wget是用来抓网页的，呵呵。</li>
<li>把 HTML 转成文本： lynx -dump -stdin</li>
<li>如果你要处理XML，使用 xmlstarlet</li>
<li>对于 Amazon S3， s3cmd 是一个很方便的命令（还有点不成熟）</li>
<li>在 ssh中，知道怎么来使用ssh隧道。通过 -L or -D (还有-R) ，翻墙神器。</li>
<li>你还可以对你的ssh 做点优化。比如，.ssh/config 包含着一些配置：避免链接被丢弃，链接新的host时不需要确认，转发认证，以前使用压缩（如果你要使用scp传文件）：</li>
</ul>
<pre><code>TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
StrictHostKeyChecking=no
Compression=yes
ForwardAgent=yes
</code></pre>
<p>如果你有输了个命令行，但是你改变注意了，但你又不想删除它，因为你要在历史命令中找到它，但你也不想执行它。那么，你可以按下 Alt-# ，于是这个命令关就被加了一个#字符，于是就被注释掉了。</p>
<h2 id="数据处理"><a class="header" href="#数据处理">数据处理</a></h2>
<ul>
<li>了解 sort 和 uniq 命令 (包括 uniq 的 -u 和 -d 选项).</li>
<li>了解用 cut, paste, 和 join 命令来操作文本文件。很多人忘了在cut前使用join。</li>
<li>如果你知道怎么用sort/uniq来做集合交集、并集、差集能很大地促进你的工作效率。假设有两个文本文件a和b已解被 uniq了，那么，用sort/uniq会是最快的方式，无论这两个文件有多大（sort不会被内存所限，你甚至可以使用-T选项，如果你的/tmp目录很小）</li>
</ul>
<pre><code class="language-bash">cat a b | sort | uniq &gt; c   # c is a union b 并集
 
cat a b | sort | uniq -d &gt; c   # c is a intersect b 交集
 
cat a b b | sort | uniq -u &gt; c   # c is set difference a - b 差集
</code></pre>
<ul>
<li>了解和字符集相关的命令行工具，包括排序和性能。很多的Linux安装程序都会设置LANG 或是其它和字符集相关的环境变量。这些东西可能会让一些命令（如：sort）的执行性能慢N多倍（注：就算是你用UTF-8编码文本文件，你也可以很安全地使用ASCII来对其排序）。如果你想Disable那个i18n 并使用传统的基于byte的排序方法，那就设置export LC_ALL=C （实际上，你可以把其放在 .bashrc）。如果这设置这个变量，你的sort命令很有可能会是错的。</li>
<li>了解 awk 和 sed，并用他们来做一些简单的数据修改操作。例如：求第三列的数字之和： awk ‘{ x += $3 } END { print x }’。这可能会比Python快3倍，并比Python的代码少三倍。</li>
<li>使用 shuf 来打乱一个文件中的行或是选择文件中一个随机的行。</li>
<li>了解sort命令的选项。了解key是什么（-t和-k）。具体说来，你可以使用-k1,1来对第一列排序，-k1来对全行排序。</li>
<li>Stable sort (sort -s) 会很有用。例如：如果你要想对两例排序，先是以第二列，然后再以第一列，那么你可以这样： sort -k1,1 | sort -s -k2,2</li>
<li>我们知道，在bash命令行下，Tab键是用来做目录文件自动完成的事的。但是如果你想输入一个Tab字符（比如：你想在sort -t选项后输入<tab>字符），你可以先按Ctrl-V，然后再按Tab键，就可以输入<tab>字符了。当然，你也可以使用$’\t’。</li>
<li>如果你想查看二进制文件，你可以使用hd命令（在CentOS下是hexdump命令），如果你想编译二进制文件，你可以使用bvi命令（http://bvi.sourceforge.net/ 墙）</li>
<li>另外，对于二进制文件，你可以使用strings（配合grep等）来查看二进制中的文本。</li>
<li>对于文本文件转码，你可以试一下 iconv。或是试试更强的 uconv 命令（这个命令支持更高级的Unicode编码）</li>
<li>如果你要分隔一个大文件，你可以使用split命令（split by size）和csplit命令（split by a pattern）。</li>
</ul>
<h2 id="系统调试"><a class="header" href="#系统调试">系统调试</a></h2>
<ul>
<li>如果你想知道磁盘、CPU、或网络状态，你可以使用 iostat, netstat, top (或更好的 htop), 还有 dstat 命令。你可以很快地知道你的系统发生了什么事。关于这方面的命令，还有iftop, iotop等（参看《28个Unix/Linux的命令行神器》）</li>
<li>要了解内存的状态，你可以使用free和vmstat命令。具体来说，你需要注意 “cached” 的值，这个值是Linux内核占用的内存。还有free的值。</li>
<li>Java 系统监控有一个小的技巧是，你可以使用kill -3 <pid> 发一个SIGQUIT的信号给JVM，可以把堆栈信息（包括垃圾回收的信息）dump到stderr/logs。</li>
<li>使用 mtr 会比使用 traceroute 要更容易定位一个网络问题。</li>
<li>如果你要找到哪个socket或进程在使用网络带宽，你可以使用 iftop 或 nethogs。</li>
<li>Apache的一个叫 ab 的工具是一个很有用的，用quick-and-dirty的方式来测试网站服务器的性能负载的工作。如果你需要更为复杂的测试，你可以试试 siege。</li>
<li>如果你要抓网络包的话，试试 wireshark 或 tshark。</li>
<li>了解 strace 和 ltrace。这两个命令可以让你查看进程的系统调用，这有助于你分析进程的hang在哪了，怎么crash和failed的。你还可以用其来做性能profile，使用 -c 选项，你可以使用-p选项来attach上任意一个进程。</li>
<li>了解用ldd命令来检查相关的动态链接库。注意：ldd的安全问题</li>
<li>使用gdb来调试一个正在运行的进程或分析core dump文件。参看我写的《GDB中应该知道的几个调试方法》</li>
<li>学会到 /proc 目录中查看信息。这是一个Linux内核运行时记录的整个操作系统的运行统计和信息，比如： /proc/cpuinfo, /proc/xxx/cwd, /proc/xxx/exe, /proc/xxx/fd/, /proc/xxx/smaps.</li>
<li>如果你调试某个东西为什么出错时，sar命令会有用。它可以让你看看 CPU, 内存, 网络, 等的统计信息。</li>
<li>使用 dmesg 来查看一些硬件或驱动程序的信息或问题。</li>
</ul>

                    </main>

                    <nav class="nav-wrapper" aria-label="Page navigation">
                        <!-- Mobile navigation buttons -->
                        
                            <a rel="prev" href="如何阅读代码.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
                                <i class="fa fa-angle-left"></i>
                            </a>
                        

                        
                            <a rel="next" href="bash/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
                                <i class="fa fa-angle-right"></i>
                            </a>
                        

                        <div style="clear: both"></div>
                    </nav>
                </div>
            </div>

            <nav class="nav-wide-wrapper" aria-label="Page navigation">
                
                    <a rel="prev" href="如何阅读代码.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
                        <i class="fa fa-angle-left"></i>
                    </a>
                

                
                    <a rel="next" href="bash/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
                        <i class="fa fa-angle-right"></i>
                    </a>
                
            </nav>

        </div>

        
        <!-- Livereload script (if served using the cli tool) -->
        <script type="text/javascript">
            var socket = new WebSocket("ws://localhost:3000/__livereload");
            socket.onmessage = function (event) {
                if (event.data === "reload") {
                    socket.close();
                    location.reload();
                }
            };

            window.onbeforeunload = function() {
                socket.close();
            }
        </script>
        

        

        

        
        <script type="text/javascript">
            window.playground_copyable = true;
        </script>
        

        

        
        <script src="elasticlunr.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="mark.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="searcher.js" type="text/javascript" charset="utf-8"></script>
        

        <script src="clipboard.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="highlight.js" type="text/javascript" charset="utf-8"></script>
        <script src="book.js" type="text/javascript" charset="utf-8"></script>

        <!-- Custom JS scripts -->
        

        

    </body>
</html>
